iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Mobile Development

Jetpack Compose 從心開始系列 第 14

Jetpack Compose 從心開始 Day14 - Navigation 導覽

  • 分享至 

  • xImage
  •  

前言

   使用fragment 轉跳頁面就會用到 Navigation 元件呀!

什麼是 Compose Navigation?

Compose Navigation 是 Jetpack Compose 提供的一個強大工具,用於在 Android 應用程式中管理導航。它提供了一種宣告式的方式來定義導航目的地、在目的地之間導航以及處理深層連結。

核心概念

  • 目的地 (Destinations): 代表應用程式中的不同畫面或視圖。
  • NavHost: 主持導航圖,並顯示當前的目的地。
  • NavGraph: 定義導航層級結構以及目的地之間的關係。
  • NavBackStackEntry: 代表導航返回堆疊中的單一條目。

基本用法

創建 NavHost:

https://ithelp.ithome.com.tw/upload/images/20240924/20121643XGiXVnplZn.png

https://ithelp.ithome.com.tw/upload/images/20240924/20121643nuzzRRg4cN.png

NavHost(
            navController = navController,
            startDestination = MooncakeScreen.Start.name,
            modifier = Modifier
                .fillMaxSize()
                .verticalScroll(rememberScrollState())
                .padding(innerPadding)
        ) {
            composable(route = MooncakeScreen.Start.name) {
                StartOrderScreen(
                    quantityOptions = Datasource().quantityOptions(),
                    onNextButtonClicked = {
                        viewModel.setQuantity(it)
                        navController.navigate(MooncakeScreen.Flavor.name)
                    },
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(dimensionResource(R.dimen.padding_medium))
                )
            }

在目的地之間導航:

https://ithelp.ithome.com.tw/upload/images/20240924/20121643jjffjZ0QVp.png

onNextButtonClicked = {
       viewModel.setQuantity(it)
       
       navController.navigate(MooncakeScreen.Flavor.name)
    },
onNextButtonClicked = { navController.navigate(MooncakeScreen.Pickup.name) },

onNextButtonClicked = { navController.navigate(MooncakeScreen.Summary.name) },

轉跳到開始畫面

navController.popBackStack(MooncakeScreen.Start.name, inclusive = false)

執行結果

page1
https://ithelp.ithome.com.tw/upload/images/20240924/201216435E5mqglolC.png

page2
https://ithelp.ithome.com.tw/upload/images/20240924/20121643mlmDwXz94q.png

page3
https://ithelp.ithome.com.tw/upload/images/20240924/20121643TwlSkLHsK4.png

page4
https://ithelp.ithome.com.tw/upload/images/20240924/20121643ouGFFWphWq.png

參考

https://developer.android.com/codelabs/basic-android-kotlin-compose-navigation


上一篇
Jetpack Compose 從心開始 Day13 - ViewModel 的單元測試
下一篇
Jetpack Compose 從心開始 Day15 - 協同程式
系列文
Jetpack Compose 從心開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言